package top.zlcode.common.message.service;

import jakarta.mail.internet.MimeMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import top.zlcode.common.message.constants.EmailConstants;
import top.zlcode.common.message.enums.EmailTemplate;

@Component
@Slf4j
public class EmailService {

    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${zlcode.email.from:}")
    private String from; // 发件人


    /**
     * 发送邮件, 不使用 html 模板
     * @param subject 主题
     * @param content 正文
     * @param to 收件人数组
     */
    public boolean send(String subject, String content, String[] to) {
        MimeMessage message = getMessage(subject, content, to);
        return sendEmail(message);
    }

    /**
     * 发送邮件, 不使用 html 模板
     * @param subject 主题
     * @param content 正文
     * @param to 收件人
     */
    public boolean send(String subject, String content, String to) {
        MimeMessage message = getMessage(subject, content, to);
        return sendEmail(message);
    }

    /**
     * 发送邮件, 使用默认subject，同时不使用模板
     * @param content 正文
     * @param to 收件人数组
     */
    public boolean send(String content, String[] to) {
        MimeMessage message = getMessage(EmailConstants.DEFAULT_SUBJECT, content, to);
        return sendEmail(message);
    }

    /**
     * 发送邮件, 使用默认subject，同时不使用模板
     * @param content 正文
     * @param to 收件人
     */
    public boolean send(String content, String to) {
        MimeMessage message = getMessage(EmailConstants.DEFAULT_SUBJECT, content, to);
        return sendEmail(message);
    }


    private MimeMessage getMessage(String subject, String content, String... to)  {
        MimeMessage message = null;
        try {
            message = javaMailSender.createMimeMessage();
            // 创建 MimeMessageHelper
            MimeMessageHelper helper = new MimeMessageHelper(message, false);
            // 发件人邮箱和名称
            helper.setFrom(from);
            // 收件人邮箱
            helper.setTo(to);
            // 邮件标题
            helper.setSubject(subject);
            // 邮件正文，第二个参数表示是否是HTML正文
            helper.setText(content, true);
        } catch (Exception e) {
            log.error("给 {} 邮箱发送验证码失败, 失败原因为: {}", to, e);
            return null;
        }

        return message;
    }

    private boolean sendEmail(MimeMessage message) {
        if (message == null) {
            return false;
        }
        try {
            javaMailSender.send(message);
        } catch (Exception e) {
            log.error(e.toString());
            return false;
        }
        return true;
    }
}
